#ifndef VISUALIZER_STATE_H
#define VISUALIZER_STATE_H

#include "State.h"

#include <OgreVector3.h>

class GeometryGenerator;
class VisCamController;

namespace Ogre
{
    class Root;
    class SceneManager;
    class Viewport;
    class SceneNode;
    class Camera;
    class Light;
};

namespace SkyX
{
    class SkyX;
    class BasicController;
};

class VisualizerState : public State
{
public:
    VisualizerState(Overseer *o, GeometryGenerator *gg);
    void initialise();
    void exit();
    void pause();
    void resume();
    void update(double timeSinceLastFrame);
protected:
    bool keyPressed(const OIS::KeyEvent &evt);
    bool keyReleased(const OIS::KeyEvent &evt);
    bool mouseMoved(const OIS::MouseEvent &evt);
    bool mousePressed(const OIS::MouseEvent &evt, OIS::MouseButtonID id);
    bool mouseReleased(const OIS::MouseEvent &evt, OIS::MouseButtonID id);
private:
    GeometryGenerator *geometryGenerator;
    VisCamController *camController;
    Ogre::Root *root;
    Ogre::SceneManager *smgr;
    Ogre::Viewport *vp;
    Ogre::Camera *camera;
    Ogre::Light *light;
    SkyX::SkyX *skyX;
    SkyX::BasicController *skyXController;
};

#endif
